<?php
/**
 * Représentation d'une personne
 * 
 * Une personne représente un utilisateur
 * répertorie dans le répertoire LDAP de
 * l'entreprise.
 * @author Lyranis <lyranis@gmail.com>
 * @version 1.0
 * @package contacts
 */


/**
 * @Entity
 * @Table(name="personne")
 */
class Application_Model_Personne {

    /**
     * Clé primaire de la personne.
     * @Id @Column(type="string") 
     * @access private
     * @var string
     */
	private $id;
	
	/**
     * Nom de famille de la personne.
     * @Column(type="string") 
     * @access private
     * @var string
     */
	private $nom;
	
	/**
     * Prénom de la personne.
     * @Column(type="string") 
     * @access private
     * @var string
     */
	private $prenom;
	
	/**
     * Numéro de téléphone fixe de la personne.
     * Exemple: 0313253321. Pas d'indicatif de pays.
     * @Column(type="string") 
     * @access private
     * @var string
     */
	private $telFixe;
	
	/**
     * Numéro de téléphone mobile de la personne.
     * Exemple: 0763435567. Pas d'indicatif de pays.
     * @Column(type="string") 
     * @access private
     * @var string
     */
	private $telMobile;
	
	/**
     * Numéro de téléphone mobile de la personne.
     * Exemple: 0763435567. Pas d'indicatif de pays.
     * @Column(type="string") 
     * @access private
     * @var string
     */
	private $email;
	
	/**
     * L'objet "Organisation" dont fait partie la personne.
     * Sera rempli automatiquement par Doctrine.
     * @access private
     * @var Organisation
     * @ManyToOne(targetEntity="Application_Model_Organisation")
     */
	private $organisation;
	
	
	public function __construct(array $options  = null) {
		if (is_array($options)) {
            $this->setOptions($options);
        }
	}
	
	/**
	 * Tente d'appeler les setters en utilisant la méthode magique __set()
	 * @param array $options
	 */
	private function setOptions(array $options) {
		$methods = get_class_methods ( $this );
		foreach ( $options as $key => $value ) {
			$method = 'set' . ucfirst ( $key );
			if (in_array ( $method, $methods )) {
				$this->$method ( $value );
			}
		}
		return $this;
	}
	
	public function __set($name, $value) {
		$method = 'set' . $name;
		if (!method_exists ( $this, $method )) {
			throw new Exception ( 'Propriété ' .$name . 'non valide.' );
		}
		$this->$method ( $value );
	}
	
    public function __get($name) {
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception ( 'Propriété ' .$name . 'non valide.' );
        }
        return $this->$method();
    }
	
	
	/**
	 * @return string L'identifiant de l'utilisateur.
	 */
	public function getId() {
		return $this->id;
	}

	/**
	 * @return string Le numéro de téléphone fixe.
	 */
	public function getTelFixe() {
		return $this->telFixe;
	}

	/**
	 * @return string Le numéro de téléphone mobile.
	 */
	public function getTelMobile() {
		return $this->telMobile;
	}

	/**
	 * @return string L'adresse email.
	 */
	public function getEmail() {
		return $this->email;
	}
	
	/**
	 * @return Application_Model_Organisation L'objet Organisation.
	 */
	public function getOrganisation() {
		return $this->organisation;
	}
	

	/**
	 * @param string $id
	 */
	public function setId($id) {
		$this->id = $id;
	}

	/**
	 * @param string $telFixe
	 */
	public function setTelFixe($teFixe) {
		$this->telFixe = $telFixe;
	}

	/**
	 * @param string $tel_mobile
	 */
	public function setTelMobile($telMobile) {
		$this->telMobile = $telMobile;
	}

	/**
	 * @param string $email
	 */
	public function setEmail(string $email) {
		$this->email = $email;
	}
	

	/**
	 * @param Organisation $organisation
	 */
	public function setOrganisation(Application_Model_Organisation $organisation) {
		$this->organisation = $organisation;
	}


	/**
	 * @return the $nom
	 */
	public function getNom() {
		return $this->nom;
	}

	/**
	 * @return the $prenom
	 */
	public function getPrenom() {
		return $this->prenom;
	}


	/**
	 * @param string $nom
	 */
	public function setNom($nom) {
		$this->nom = $nom;
	}

	/**
	 * @param string $prenom
	 */
	public function setPrenom($prenom) {
		$this->prenom = $prenom;
	}

	
	

	
	

	
	
	
	
	
}